import axios from "axios";
import { showLoadingToast, showToast } from "vant";

const allowedTypes = [
  "image/jpeg",
  "image/png",
  "application/pdf",
  "application/msword",
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  "application/octet-stream",
  "text/plain",
  "video/mp4",
  "video/quicktime",
  "video/x-msvideo",
];

// 分离一个对baseURL独立配置的axios模块
const instance = axios.create({
  baseURL: "http://127.0.0.1:8099/api",
  timeout: 100000,
  // headers: {'X-Custom-Header': 'foobar'}
});

// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    //针对请求接口类别统一作showLoadingToast，可避免用户重复点击请求，提升交互体验
    // showLoadingToast()
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    console.log("response", response);
    console.log("response.headers", response.headers["content-type"]);
    const data = response.data;
    if (response.status === 200) {
        if (response.headers["content-type"] && allowedTypes.includes(response.headers["content-type"])) {
            return response;
        }else{
            return data;
        }
    } else if (response.status >= 200 && response.status < 300) {
      return {
        ...data,
        message: data.message,
      };
    } else {
      // Promise 会中断await后的程序
      // 实现await之后就是成功状态，在这里统一处理非成功状态
      showToast(data.message);
      return Promise.reject(data.message);
    }
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);
export default instance;
